#if !defined(READ_OPTIONS_H)
#define READ_OPTIONS_H


#include <boost/program_options/options_description.hpp>
#include <boost/program_options/value_semantic.hpp>
#include "std_options.h"
#include <vector>
#include <string>

#include <tuple>

//________________________________________________________________________________________
// 
// 		read_options
//________________________________________________________________________________________
class prog_options : public t_std_options
{
private:
public:
	prog_options():
		t_std_options(	"\nRead SNP files in tab-delimited <contig><pos>[<category>] where <category> is optional.\n\n"
						"Save SNPs within specified intervals and categories.\n\n"
						"SNPs of different sorts can be sent to different output files by "
						"specifying '[INTERVAL_TYPE]' and '[CATEGORY]' as part of the output name.\n\n"
						"Multiple interval files can be specified, each with its own type.\n"
						"(Only the first specified enclosing interval type will be chosen "
						"for multiple matches and SNPs outside of an interval will be assigned "
						"the default type.)\n", 
						" --input_file SNP_FILE --output_file PATTERN\n "
						" --interval_file FILE --interval_type NAME\n "
						"[--category_saved CATEGORY\n "
						" --interval_saved INTERVAL\n "
						" --category_interval_saved 'CATEGORY[&&]INTERVAL'\n "
						" --add_interval_to_output\n "
						" --interval_file FILE --interval_type NAME [options]]\n "
						, "1.0 02/03/2011", true),
		zero_based_snps(false),
		zero_based_intervals(false),
		add_interval_to_output(false),
		jobs(0){}

	std::string											input_file_name;			
	std::string											output_file_name;			
	std::vector<std::string>							interval_file_names;			
	std::vector<std::string>							interval_type_names;			
	std::string											default_interval_type_name;			
	std::string											contig_sizes_file_name;			
	std::vector<std::string>							to_save_categories;			
	std::vector<std::string>							to_save_interval_type_names;			
	std::vector<std::tuple<std::string,std::string> >	to_save_interval_type_name_category_pairs;			
	bool												zero_based_snps;			
	bool												zero_based_intervals;;			
	bool												add_interval_to_output;			
	unsigned											jobs;			
};

bool read_options(prog_options& opt, int argc, char *argv[]);
#endif



